<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('contract_renewals', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 关联信息
            $table->unsignedBigInteger('contract_id'); // 原合同ID
            $table->unsignedBigInteger('employee_id'); // 员工ID
            $table->string('original_contract_number', 100)->nullable(); // 原合同编号

            // 续约信息
            $table->string('renewal_type', 20); // 续约类型：automatic, manual, early_renewal
            $table->integer('renewal_number')->default(1); // 第几次续约
            $table->string('renewal_reason', 200)->nullable(); // 续约原因

            // 新合同期限
            $table->date('new_start_date'); // 新合同开始日期
            $table->date('new_end_date'); // 新合同结束日期
            $table->integer('extension_months')->nullable(); // 延长月数
            $table->boolean('is_open_ended')->default(false); // 是否改为无固定期限

            // 薪资调整
            $table->decimal('previous_salary', 10, 2)->nullable(); // 原薪资
            $table->decimal('new_salary', 10, 2)->nullable(); // 新薪资
            $table->decimal('salary_adjustment_percentage', 5, 2)->nullable(); // 薪资调整百分比
            $table->text('salary_adjustment_reason')->nullable(); // 薪资调整原因

            // 岗位调整
            $table->string('previous_position', 100)->nullable(); // 原岗位
            $table->string('new_position', 100)->nullable(); // 新岗位
            $table->string('position_change_reason', 200)->nullable(); // 岗位变更原因

            // 其他变更
            $table->json('benefits_changes')->nullable(); // 福利待遇变更
            $table->json('responsibilities_changes')->nullable(); // 职责变更
            $table->json('working_condition_changes')->nullable(); // 工作条件变更

            // 审批信息
            $table->string('proposed_by', 100)->nullable(); // 续约提议人
            $table->date('proposed_at')->nullable(); // 提议日期
            $table->string('approved_by', 100)->nullable(); // 审批人
            $table->date('approved_at')->nullable(); // 审批时间
            $table->text('approval_notes')->nullable(); // 审批备注

            // 签署信息
            $table->string('signed_by_employee')->nullable(); // 员工签署人
            $table->date('signed_by_employee_date')->nullable(); // 员工签署日期
            $table->string('signed_by_company')->nullable(); // 公司签署人
            $table->date('signed_by_company_date')->nullable(); // 公司签署日期

            // 状态信息
            $table->string('status', 20)->default('draft'); // 状态：draft, approved, rejected, signed, active
            $table->string('rejection_reason', 200)->nullable(); // 拒绝原因
            $table->date('effective_date')->nullable(); // 生效日期

            // 附件信息
            $table->json('attachments')->nullable(); // 相关附件

            // 备注信息
            $table->text('notes')->nullable(); // 备注
            $table->json('additional_terms')->nullable(); // 附加条款

            // 索引
            $table->index(['contract_id']);
            $table->index(['employee_id']);
            $table->index(['renewal_type']);
            $table->index(['renewal_number']);
            $table->index(['status']);
            $table->index(['new_start_date']);
            $table->index(['new_end_date']);
            $table->index(['approved_at']);
            $table->index(['effective_date']);

            // 外键约束
            $table->foreign('contract_id')->references('id')->on('contracts')->onDelete('cascade');
            $table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('contract_renewals');
    }
};
